package com.yzh;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author 于振晗
 * @title: SSQGame
 * @description: TODO 双色球游戏
 * @date 2020年08月19日
 * @path com.yzh
 */
public class SSQGame {
    public static Scanner input = new Scanner(System.in);
    static boolean isBuy = false;
    static int [] selectArr = null;
    //总共购买注数
    static int count = 0;
    //每一注两块钱
    static final int PRICE = 2;


    public static void main(String[] args) {
        System.out.println("***欢迎进入双色球彩票系统***");
        do {
            headerPrint();
            int sel = input.nextInt();
            switch (sel) {
                case 1:
                    buyLottery();
                    break;
                case 2:
                    viewLottery();
                    break;
                case 3:
                    System.err.println("退出系统");
                    return;
                default:
                    System.out.println("输入错误");
            }
            System.out.println("请按任意键继续...");
            input.nextLine();
            double  d = 3;
            	byte  b = 3;
            	int  i = (int)3.14;
            	char  ch = 5 + 'a';

        }while (true);
    }



    /**
     * 程序提示信息
     */
    public static void headerPrint(){
        System.out.println("\t1.购买彩票");
        System.out.println("\t2.查看开奖");
        System.out.println("\t3.退出");
        System.out.println("***************************");
        System.out.println("请选择菜单：");
    }


    /**
     * 1.购买彩票
     */
    public static void buyLottery(){
        System.out.println("购买彩票");
        //1.请输入购买的注数
        System.out.println("请输入要购买的注数：");
        count = input.nextInt();
        //2.输入7个号码（6+1）
        selectArr = selectNum();
        //3.输出刚刚选择的6个号码
        System.out.print("您选择的号码是：");
        System.out.println(Arrays.toString(selectArr));
        System.out.println(",您一共购买了"+count+"注,总费用是："+count*PRICE+"元");
        //4.修改购买状态
        isBuy = true;
    }

    /**
     * 输入购买号码
     * @return 购买号码数组
     */
    public static int[] selectNum(){
        //定义数组
        int [] selectArr = new int[7];
        //循环遍历输入赋值
        for (int i = 0; i < selectArr.length; i++) {
            if(i<6){
                do {
                    boolean flag = false;
                    System.out.println("请输入第"+(i+1)+"个红球号码（1-33）");
                    selectArr[i] = input.nextInt();
                    for (int j = 0; j < selectArr.length; j++) {
                        if (selectArr[i] == selectArr[j] && i!=j) {
                            flag = true;
                            break;
                        }
                    }
                    if(selectArr[i]<1 || selectArr[i]>33 || flag){
                        if(flag){
                            System.out.println("数值不可重复");
                        }else{
                            System.out.println("数值超过可选范围错误，请继续输入");
                        }
                    }else{
                        break;
                    }
                }while (true);

            }else{
                do {
                    boolean flag = false;
                    System.out.println("请输入第"+(i+1)+"个红球号码（1-16）");
                    selectArr[i] = input.nextInt();
                    for (int j = 0; j < selectArr.length; j++) {
                        if (selectArr[i] == selectArr[j] && i!=j) {
                            flag = true;
                            break;
                        }
                    }
                    if(selectArr[i]<1 || selectArr[i]>16 || flag){
                        if(flag){
                            System.out.println("数值不可重复");
                        }else{
                            System.out.println("数值超过可选范围错误，请继续输入");
                        }
                    }else{
                        break;
                    }
                }while (true);
            }
        }
        return selectArr;
    }


    /**
     * 2.查看彩票
     */
    public static void viewLottery(){
        System.out.println("查看开奖");
        if (isBuy) {
            //获取生成的中将号码
            int[] luckArr = getLuckArr();
            //打印中将号码
            System.out.println(Arrays.toString(luckArr));
            //打印我购买的号码为
            System.out.println(Arrays.toString(selectArr));

            //判断中奖的级别
            int level = getLuckLevel(luckArr,selectArr);

            switch (level) {
                case 1:
                        System.out.println("【一等奖】,恭喜你!!共下了【"+count+"】注,投资【"+count*PRICE+"】元,获奖【"+(500*count)+"】万元");
                    break;
                case 2:
                    System.out.println("【二等奖】,恭喜你!!共下了【"+count+"】注,投资【"+count*PRICE+"】元,获奖【"+(100*count)+"】万元");
                    break;
                case 3:
                    System.out.println("【三等奖】,恭喜你!!共下了【"+count+"】注,投资【"+count*PRICE+"】元,获奖【"+(5*count)+"】万元");
                    break;
                case 4:
                    System.out.println("【四等奖】,恭喜你!!共下了【"+count+"】注,投资【"+count*PRICE+"】元,获奖【"+(1000*count)+"】元");
                    break;
                case 5:
                    System.out.println("【五等奖】,恭喜你!!共下了【"+count+"】注,投资【"+count*PRICE+"】元,获奖【"+(100*count)+"】元");
                    break;
                case 6:
                    System.out.println("【六等奖】,恭喜你!!共下了【"+count+"】注,投资【"+count*PRICE+"】元,获奖【"+(PRICE*count)+"】元");
                    break;
                default:
                    System.out.println("再买一注吧，这把运气不好！");
            }
        }else{
            System.out.println("还没有购买彩票");
        }
    }

    /**
     * 生成获取的号码
     * @return
     */
    public static int[] getLuckArr() {
        int [] luckyArr = new int[7];
        for (int i = 0; i < luckyArr.length; i++) {
            if(i<6){
                luckyArr[i] = (int)(Math.random()*33)+1;
            }else{
                luckyArr[i] = (int)(Math.random()*16)+1;
            }
        }
        return luckyArr;
    }

    /**
     * 判断中奖级别
     * @return 中将级别
     */
    public static int getLuckLevel(int [] luckArr,int [] selectArr) {

        //中奖等级
        int level = 0;
        int redCount = 0;
        int blueCount = 0;
        for (int i = 0; i < selectArr.length; i++) {
            if(i<selectArr.length-1){
                //红球的比较
                for (int j = 0; j < luckArr.length; j++) {
                    if(selectArr[i] == luckArr[j]){
                        redCount++;
                        break;
                    }
                }
            }else{
                //蓝球的比较
                if (selectArr[selectArr.length-1] == luckArr[luckArr.length-1]) {
                    blueCount++;
                }
            }
        }
        /**
         * 一等奖：投注号码与当期开奖号码全部相同（顺序不限，下同），即中奖；
         * 二等奖：投注号码与当期开奖号码中的6个红色球号码相同，即中奖；
         * 三等奖：投注号码与当期开奖号码中的任意5个红色球号码和1个蓝色球号码相同，即中奖；
         * 四等奖：投注号码与当期开奖号码中的任意5个红色球号码相同，或与任意4个红色球号码和1个蓝色球号码相同，即中奖；
         * 五等奖：投注号码与当期开奖号码中的任意4个红色球号码相同，或与任意3个红色球号码和1个蓝色球号码相同，即中奖；
         * 六等奖：投注号码与当期开奖号码中的1个蓝色球号码相同，即中奖。
         */
        if(redCount == 6 && blueCount == 1){
            level = 1;
        }else if(redCount == 6){
            level = 2;
        }else if(redCount == 5 && blueCount == 1){
            level = 3;
        }else if(redCount == 5 || (redCount ==4 && blueCount == 1)){
            level = 4;
        }else if(redCount == 4 || (redCount == 3 && blueCount == 1)){
            level = 5;
        }else if(blueCount == 6){
            level = 6;
        }else{
            level = 7;
        }
        return level;
    }
}
